package com.itheima.java.ai.langchin4j.enums;

/**
 * 提示词场景枚举
 * 定义不同医疗场景下的提示词类型
 */
public enum PromptScenario {
    
    /**
     * 医疗咨询场景
     */
    MEDICAL_CONSULTATION("medical_consultation", "医疗咨询", "medical-consultation-prompt-template.txt"),
    
    /**
     * 预约挂号场景
     */
    APPOINTMENT_BOOKING("appointment_booking", "预约挂号", "appointment-booking-prompt-template.txt"),
    
    /**
     * 紧急情况处理场景
     */
    EMERGENCY_HANDLING("emergency_handling", "紧急情况处理", "emergency-handling-prompt-template.txt"),
    
    /**
     * 症状分析场景
     */
    SYMPTOM_ANALYSIS("symptom_analysis", "症状分析", "symptom-analysis-prompt-template.txt"),
    
    /**
     * 用药指导场景
     */
    MEDICATION_GUIDANCE("medication_guidance", "用药指导", "medication-guidance-prompt-template.txt"),
    
    /**
     * 健康咨询场景
     */
    HEALTH_CONSULTATION("health_consultation", "健康咨询", "health-consultation-prompt-template.txt"),
    
    /**
     * 默认通用场景
     */
    DEFAULT("default", "通用场景", "zhaozhi-prompt-template.txt");
    
    private final String code;
    private final String description;
    private final String templateFile;
    
    PromptScenario(String code, String description, String templateFile) {
        this.code = code;
        this.description = description;
        this.templateFile = templateFile;
    }
    
    public String getCode() {
        return code;
    }
    
    public String getDescription() {
        return description;
    }
    
    public String getTemplateFile() {
        return templateFile;
    }
    
    /**
     * 根据代码获取场景枚举
     */
    public static PromptScenario fromCode(String code) {
        for (PromptScenario scenario : values()) {
            if (scenario.code.equals(code)) {
                return scenario;
            }
        }
        return DEFAULT;
    }
    
    /**
     * 根据用户消息内容智能识别场景
     */
    public static PromptScenario detectScenario(String userMessage) {
        if (userMessage == null || userMessage.trim().isEmpty()) {
            return DEFAULT;
        }
        
        String message = userMessage.toLowerCase();
        
        // 紧急情况关键词检测（优先级最高）
        if (containsAny(message, "急救", "紧急", "危险", "昏迷", "休克", "心脏病", "中风", "呼吸困难", "大出血", "骨折", "中毒")) {
            return EMERGENCY_HANDLING;
        }
        
        // 预约挂号关键词检测
        if (containsAny(message, "预约", "挂号", "约诊", "看病", "就诊", "门诊", "专家号", "科室", "医生")) {
            return APPOINTMENT_BOOKING;
        }
        
        // 用药指导关键词检测
        if (containsAny(message, "用药", "吃药", "药物", "剂量", "副作用", "禁忌", "药品", "处方", "服用")) {
            return MEDICATION_GUIDANCE;
        }
        
        // 症状分析关键词检测
        if (containsAny(message, "症状", "疼痛", "发烧", "咳嗽", "头痛", "腹痛", "恶心", "呕吐", "腹泻", "失眠", "乏力")) {
            return SYMPTOM_ANALYSIS;
        }
        
        // 健康咨询关键词检测
        if (containsAny(message, "健康", "保健", "养生", "预防", "体检", "营养", "运动", "饮食", "生活习惯")) {
            return HEALTH_CONSULTATION;
        }
        
        // 医疗咨询关键词检测
        if (containsAny(message, "诊断", "治疗", "病情", "疾病", "检查", "化验", "手术", "康复")) {
            return MEDICAL_CONSULTATION;
        }
        
        return DEFAULT;
    }
    
    /**
     * 检查消息是否包含任意一个关键词
     */
    private static boolean containsAny(String message, String... keywords) {
        for (String keyword : keywords) {
            if (message.contains(keyword)) {
                return true;
            }
        }
        return false;
    }
}